package com.team01.pokemon.controller;

import com.team01.pokemon.entity.Pokemon;
import com.team01.pokemon.mapper.PokemonMapper;
import com.team01.pokemon.result.Result;
import com.team01.pokemon.service.PokemonService;
import com.team01.pokemon.vo.PokemonVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 宝可梦接口处理
 * 
 * @author sunbingjian
 * @since 2025-09-13
 */
@RestController
@RequestMapping("/pokemon")
public class PokemonController {

    @Autowired
    private PokemonService pokemonService;

    //首页查询宝可梦列表————简单查询（编号、名称）
    @GetMapping("/query")
    public Result ListByQuery(PokemonVO vo) {
        // 获取所有宝可梦数据
        List<Pokemon> list = pokemonService.getListByQuery(vo);
        if (!CollectionUtils.isEmpty(list)) {
            return new Result(true, "查询宝可梦列表成功", list);
        }
        return new Result(false, "未找到宝可梦数据", null);
    }

    //首页查询宝可梦列表————多条件查询（单/双属性、特性、编号范围）
    //进化页面查询宝可梦列表——————多条件查询（单属性、名称）
    @GetMapping("/vo")
    public Result ListByVO(PokemonVO vo) {
        // 获取所有宝可梦数据
        List<Pokemon> list = pokemonService.getListByVO(vo);
        if (!CollectionUtils.isEmpty(list)) {
            return new Result(true, "查询宝可梦列表成功", list);
        }
        return new Result(false, "未找到宝可梦数据", null);
    }

    /**
     * 获取所有宝可梦列表
     */
    @GetMapping("/list")
    public Result getAllPokemon(PokemonVO vo) {
        List<Pokemon> list = pokemonService.getListByQuery(vo);
        if (!CollectionUtils.isEmpty(list)) {
            return new Result(true, "获取宝可梦列表成功", list);
        }
        return new Result(false, "未找到宝可梦数据", null);
    }


    //进化页面查询宝可梦列表————多条件查询（编号、名称、类型）
//    @GetMapping("/search")
//    public Result searchAllPokemon(PokemonVO vo) {
//        List<Pokemon> list = pokemonService.getListByVOEvolution(vo);
//        if (!CollectionUtils.isEmpty(list)) {
//            return new Result(true, "获取宝可梦列表成功", list);
//        }
//        return new Result(false, "未找到宝可梦数据", null);
//    }

    /**
     * 获取第一世代宝可梦（编号1-151）
     */
    @GetMapping("/gen1")
    public Result getGen1Pokemon() {
        PokemonVO vo = new PokemonVO();
        vo.setBeginNum(1);
        vo.setEndNum(151);
        List<Pokemon> list = pokemonService.getListByVO(vo);
        if (!CollectionUtils.isEmpty(list)) {
            return new Result(true, "获取第一世代宝可梦成功", list);
        }
        return new Result(false, "未找到第一世代宝可梦数据", null);
    }

    /**
     * 获取用于进化选择器的宝可梦简化列表
     * 只返回id、名称、编号、图片等基本信息，用于下拉选择器
     */
//    @GetMapping("/selector-list")
//    public Result getPokemonSelectorList() {
//        try {
//            List<Pokemon> list = pokemonService.getPokemonSelectorList();
//            if (!CollectionUtils.isEmpty(list)) {
//                return new Result(true, "获取宝可梦选择器列表成功", list);
//            }
//            return new Result(false, "未找到宝可梦数据", null);
//        } catch (Exception e) {
//            return new Result(false, "获取宝可梦选择器列表失败: " + e.getMessage(), null);
//        }
//    }

    // ==================== 进化页面专用API ====================

    /**
     * 进化页面 - 获取所有宝可梦列表
     * 包含完整的宝可梦信息和属性信息，用于进化页面的宝可梦展示
     */
//    @GetMapping("/evolution/all")
//    public Result getEvolutionPokemonAll() {
//        try {
//            PokemonVO vo = new PokemonVO();
//            List<Pokemon> list = pokemonService.getListByQuery(vo);
//            if (!CollectionUtils.isEmpty(list)) {
//                return new Result(true, "获取进化页面宝可梦列表成功", list);
//            }
//            return new Result(false, "未找到宝可梦数据", null);
//        } catch (Exception e) {
//            return new Result(false, "获取进化页面宝可梦列表失败: " + e.getMessage(), null);
//        }
//    }

    /**
     * 进化页面 - 通过属性筛选宝可梦
     * 
     * @param type 属性名称（如：火系、水系、草系、电系等，或者火、水、草、电等）
     * @return 筛选后的宝可梦列表
     */
//    @GetMapping("/evolution/by-type")
//    public Result getEvolutionPokemonByType(@RequestParam("type") String type) {
//        try {
//            if (type == null || type.trim().isEmpty()) {
//                return new Result(false, "属性参数不能为空", null);
//            }
//
//            String typeParam = type.trim();
//            // 如果用户输入的是简化格式（如"火"），自动添加"系"
//            if (!typeParam.endsWith("系") && typeParam.length() <= 3) {
//                typeParam = typeParam + "系";
//            }
//
//            PokemonVO vo = new PokemonVO();
//            vo.setType1(typeParam);
//            List<Pokemon> list = pokemonService.getListByVO(vo);
//
//            if (!CollectionUtils.isEmpty(list)) {
//                return new Result(true, "根据属性筛选宝可梦成功", list);
//            }
//            return new Result(false, "未找到该属性的宝可梦数据", null);
//        } catch (Exception e) {
//            return new Result(false, "根据属性筛选宝可梦失败: " + e.getMessage(), null);
//        }
//    }

    /**
     * 进化页面 - 通过宝可梦名称搜索
     * 
     * @param name 宝可梦名称（支持模糊匹配）
     * @return 搜索结果
     */
//    @GetMapping("/evolution/by-name")
//    public Result getEvolutionPokemonByName(@RequestParam("name") String name) {
//        try {
//            if (name == null || name.trim().isEmpty()) {
//                return new Result(false, "宝可梦名称参数不能为空", null);
//            }
//
//            PokemonVO vo = new PokemonVO();
//            vo.setQuery(name.trim());
//            List<Pokemon> list = pokemonService.getListByQuery(vo);
//
//            if (!CollectionUtils.isEmpty(list)) {
//                return new Result(true, "根据名称搜索宝可梦成功", list);
//            }
//            return new Result(false, "未找到匹配的宝可梦数据", null);
//        } catch (Exception e) {
//            return new Result(false, "根据名称搜索宝可梦失败: " + e.getMessage(), null);
//        }
//    }

    /**
     * 进化页面 - 综合查询接口
     * 支持同时使用多个条件进行查询：属性、名称、编号范围等
     * 
     * @param vo 查询条件对象
     * @return 查询结果
     */
//    @GetMapping("/evolution/search")
//    public Result getEvolutionPokemonByConditions(PokemonVO vo) {
//        try {
//            List<Pokemon> list;
//
//            // 如果有查询关键词，使用query方式
//            if (vo.getQuery() != null && !vo.getQuery().trim().isEmpty()) {
//                list = pokemonService.getListByQuery(vo);
//            } else {
//                // 否则使用VO方式进行组合查询
//                list = pokemonService.getListByVO(vo);
//            }
//
//            if (!CollectionUtils.isEmpty(list)) {
//                return new Result(true, "进化页面综合查询成功", list);
//            }
//            return new Result(false, "未找到符合条件的宝可梦数据", null);
//        } catch (Exception e) {
//            return new Result(false, "进化页面综合查询失败: " + e.getMessage(), null);
//        }
//    }

    /**
     * 进化页面 - 获取分页宝可梦列表
     * 
     * @param page    页码（从1开始）
     * @param size    每页大小
     * @param type    属性筛选（可选）
     * @param keyword 搜索关键词（可选）
     * @return 分页数据
     */
//    @GetMapping("/evolution/paged")
//    public Result getEvolutionPokemonPaged(
//            @RequestParam(value = "page", defaultValue = "1") int page,
//            @RequestParam(value = "size", defaultValue = "20") int size,
//            @RequestParam(value = "type", required = false) String type,
//            @RequestParam(value = "keyword", required = false) String keyword) {
//        try {
//            // 参数验证
//            if (page < 1)
//                page = 1;
//            if (size < 1)
//                size = 20;
//            if (size > 100)
//                size = 100; // 限制最大每页数量
//
//            PokemonVO vo = new PokemonVO();
//
//            // 设置查询条件
//            if (keyword != null && !keyword.trim().isEmpty()) {
//                vo.setQuery(keyword.trim());
//            }
//            if (type != null && !type.trim().isEmpty()) {
//                String typeParam = type.trim();
//                // 如果用户输入的是简化格式（如"火"），自动添加"系"
//                if (!typeParam.endsWith("系") && typeParam.length() <= 3) {
//                    typeParam = typeParam + "系";
//                }
//                vo.setType1(typeParam);
//            }
//
//            // 获取全部数据
//            List<Pokemon> allList;
//            if (vo.getQuery() != null && !vo.getQuery().trim().isEmpty()) {
//                allList = pokemonService.getListByQuery(vo);
//            } else {
//                allList = pokemonService.getListByVO(vo);
//            }
//
//            // 计算分页
//            int total = allList.size();
//            int totalPages = (int) Math.ceil((double) total / size);
//
//            // 边界检查：如果页码超出范围，返回空数据而不是错误
//            if (page > totalPages && totalPages > 0) {
//                // 页码超出范围，返回空数据
//                List<Pokemon> emptyData = new java.util.ArrayList<>();
//                java.util.Map<String, Object> result = new java.util.HashMap<>();
//                result.put("data", emptyData);
//                result.put("total", total);
//                result.put("page", page);
//                result.put("size", size);
//                result.put("totalPages", totalPages);
//                result.put("hasNext", false);
//                result.put("hasPrev", page > 1);
//                return new Result(true, "获取分页宝可梦列表成功", result);
//            }
//
//            int startIndex = (page - 1) * size;
//            int endIndex = Math.min(startIndex + size, total);
//
//            List<Pokemon> pageData = (startIndex >= total) ? new java.util.ArrayList<>()
//                    : allList.subList(startIndex, endIndex);
//
//            // 构建分页结果
//            java.util.Map<String, Object> result = new java.util.HashMap<>();
//            result.put("data", pageData);
//            result.put("total", total);
//            result.put("page", page);
//            result.put("size", size);
//            result.put("totalPages", totalPages);
//            result.put("hasNext", page < totalPages);
//            result.put("hasPrev", page > 1);
//
//            return new Result(true, "获取分页宝可梦列表成功", result);
//        } catch (Exception e) {
//            return new Result(false, "获取分页宝可梦列表失败: " + e.getMessage(), null);
//        }
//    }

}
